Conversation
개요피드 화면에 추천 글 카루셀 섹션을 추가하여 UI 컴포넌트와 상태 관리를 구현합니다. 새로운 RecommendFeedCard, RecommendFeedCardSection 컴포넌트를 생성하고, FeedScreen에 10번째 항목 이후에 카루셀을 통합하며, FeedViewModel에 추천 글 상태를 추가합니다. 변경 사항
시퀀스 다이어그램sequenceDiagram
participant FeedScreen
participant FeedViewModel
participant RecommendFeedCarousel
participant RecommendFeedCard
FeedScreen->>FeedViewModel: 초기화 시 FeedUiState 구독
FeedViewModel->>FeedViewModel: loadRecommendedFeeds() 호출
FeedViewModel->>FeedScreen: recommendedFeeds 업데이트 (UiState)
FeedScreen->>FeedScreen: 10번째 항목 이후 카루셀 렌더링 위치 확인
alt recommendedFeeds가 비어있지 않음
FeedScreen->>RecommendFeedCarousel: 추천 글 리스트 & onFeedClick 콜백 전달
RecommendFeedCarousel->>RecommendFeedCarousel: 리스트 크기에 따라 분기
alt 단일 항목
RecommendFeedCarousel->>RecommendFeedCard: 중앙 정렬하여 표시
else 다중 항목
RecommendFeedCarousel->>RecommendFeedCard: HorizontalPager로 각 페이지 렌더링
end
RecommendFeedCard->>RecommendFeedCard: 클릭 시 feedId 추출
RecommendFeedCard->>RecommendFeedCarousel: onClick 콜백 실행
RecommendFeedCarousel->>FeedScreen: onFeedClick(feedId) 호출
end
예상 검토 난이도🎯 3 (중간) | ⏱️ ~25분 추가 주의 사항:
관련 가능성 있는 PR
추천 레이블
추천 검토자
토끼의 시
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (1)
545-551: TODO 주석 확인 - API 연결 필요현재
loadRecommendedFeeds()함수가 빈 리스트를 반환하는 플레이스홀더 구현입니다. PR 설명에 따르면 API가 완성되면 서비스와 레포지토리만 구현하면 된다고 하셨는데, API 연결 일정이 확정되어 있나요? 추후 누락되지 않도록 이슈 트래킹을 권장드립니다.app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)
561-579: 추천 캐러셀 통합이 잘 구현되었습니다!10번째 피드 항목 후에 추천 섹션을 삽입하는 로직이 올바르게 구현되었습니다. 여백과 구분선 처리가 적절하며, 빈 리스트 체크도 포함되어 있습니다.
다만,
else블록의 로직이 약간 복잡할 수 있습니다. 현재는 마지막 항목이 아닐 때만 여백과 구분선을 추가하는데, 추천 섹션이 있는 경우와 없는 경우를 구분하여 가독성을 높일 수 있습니다.app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (1)
56-63: 텍스트 처리 로직 개선 제안현재
processedText는 줄바꿈 문자(\n)로 분할하여 3줄만 표시하지만, 이후onTextLayout에서 실제 시각적 오버플로우를 감지합니다. 이 두 로직이 중복될 수 있습니다.
SavedFeedCard처럼maxLines속성만으로 텍스트를 제한하고onTextLayout으로만 잘림을 감지하는 것이 더 간단하고 일관성 있을 수 있습니다.예시:
- // 추천글은 항상 3줄로 고정 - val processedText = remember(feedItem.contentBody) { - val lines = feedItem.contentBody.split("\n") - if (lines.size <= maxTextLines) { - feedItem.contentBody - } else { - lines.take(maxTextLines).joinToString("\n") - } - } - Column( modifier = Modifier .fillMaxWidth() .padding(12.dp) ) { // ... ProfileBar ... // ... ActionBookButton ... Column( modifier = Modifier.clickable { onClick() }, verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Box { Text( - text = processedText, + text = feedItem.contentBody, style = typography.feedcopy_r400_s14_h20, color = colors.White, maxLines = maxTextLines, modifier = Modifier.fillMaxWidth(), onTextLayout = { textLayoutResult -> isTextTruncated = textLayoutResult.hasVisualOverflow } )
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (8)
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt(5 hunks)app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt(3 hunks)app/src/main/res/drawable/ic_text_more_darkgrey.xml(1 hunks)app/src/main/res/values/strings.xml(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-07-01T07:19:10.981Z
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
Applied to files:
app/src/main/res/values/strings.xml
🧬 Code graph analysis (4)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (2)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (1)
RecommendFeedCard(37-154)app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
ThipTheme(41-69)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (3)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedWriteViewModel.kt (1)
updateState(41-43)app/src/main/java/com/texthip/thip/ui/group/viewmodel/GroupViewModel.kt (1)
updateState(30-32)app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedDetailViewModel.kt (1)
updateState(40-42)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (5)
app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt (1)
ProfileBar(30-107)app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt (1)
hexToColor(6-13)app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt (1)
ActionBookButton(27-83)app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBarButton.kt (1)
ActionBarButton(24-110)app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
ThipTheme(41-69)
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (3)
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (1)
SavedFeedCard(38-164)app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt (1)
hexToColor(6-13)app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (1)
RecommendedFeedCarousel(24-88)
🔇 Additional comments (10)
app/src/main/res/values/strings.xml (1)
459-461: LGTM!추천 피드 섹션을 위한 문자열 리소스가 잘 정의되었습니다. 네이밍 컨벤션과 형식이 기존 패턴을 잘 따르고 있습니다.
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt (1)
35-38: LGTM!배경색을
DarkGrey02에서DarkGrey로 변경하여 버튼의 시각적 대비를 개선했습니다. 새로운 추천 피드 카드에서도 일관된 스타일이 적용됩니다.app/src/main/res/drawable/ic_text_more_darkgrey.xml (1)
1-27: LGTM!텍스트 오버플로우 표시를 위한 벡터 드로어블 리소스가 잘 구현되었습니다. 그라데이션 효과와 "더보기" 글리프가 시각적으로 자연스러운 텍스트 잘림 표시를 제공합니다.
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (1)
53-127: 텍스트 잘림 감지 로직 개선이 우수합니다!
onTextLayout과hasVisualOverflow를 사용하는 새로운 접근 방식이 이전의 단순 줄 수 계산보다 훨씬 정확합니다. 실제 텍스트 렌더링 결과를 기반으로 잘림 여부를 판단하므로 다양한 화면 크기와 폰트 설정에서도 올바르게 동작합니다.app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (1)
27-27: LGTM!추천 피드를 위한 UI 상태 필드가 잘 추가되었습니다. 타입과 초기값이 적절합니다.
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)
519-528: LGTM!피드 항목 렌더링 로직이 깔끔하게 정리되었습니다. 첫 번째 항목과 이후 항목에 대한 여백 처리가 명확합니다.
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (2)
38-49: LGTM!추천 피드 카드의 기본 구조가 잘 설계되었습니다. 카드 스타일과 색상이 디자인 시스템과 일관성을 유지합니다.
140-151: ActionBarButton 상호작용 확인ActionBarButton의
onLikeClick과onBookmarkClick이 빈 람다로 설정되어 있어, 개별 액션이 작동하지 않고 카드 전체 클릭만 처리됩니다. 이것이 의도된 동작인지 확인이 필요합니다.만약 추천 피드에서 좋아요/저장 기능을 개별적으로 제공하지 않는 것이 기획 의도라면 현재 구현이 맞지만, 향후 개별 액션이 필요하다면 콜백을 전달받도록 수정해야 합니다.
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (2)
25-30: LGTM!빈 리스트에 대한 조기 반환 처리가 올바르게 구현되었습니다. 불필요한 렌더링을 방지합니다.
54-86: 단일/다중 아이템 처리 로직이 우수합니다!카드가 1개일 때와 여러 개일 때를 구분하여 처리하는 로직이 좋습니다. 단일 아이템의 경우 중앙 정렬, 다중 아이템의 경우 페이저를 사용하여 UX를 최적화했습니다.
| AllFeedItem( | ||
| feedId = 1, | ||
| creatorId = 123L, | ||
| creatorNickname = "user.01", | ||
| creatorProfileImageUrl = null, | ||
| aliasName = "공식 인플루언서", | ||
| aliasColor = "#97E4A3", | ||
| postDate = "2시간 전", | ||
| isbn = "9788983711892", | ||
| bookTitle = "코스모스", | ||
| bookAuthor = "칼 세이건", | ||
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | ||
| contentUrls = emptyList(), | ||
| likeCount = 42, | ||
| commentCount = 8, | ||
| isSaved = false, | ||
| isLiked = false, | ||
| isWriter = false | ||
| ), | ||
| AllFeedItem( | ||
| feedId = 1, | ||
| creatorId = 123L, | ||
| creatorNickname = "user.01", | ||
| creatorProfileImageUrl = null, | ||
| aliasName = "공식 인플루언서", | ||
| aliasColor = "#97E4A3", | ||
| postDate = "2시간 전", | ||
| isbn = "9788983711892", | ||
| bookTitle = "코스모스", | ||
| bookAuthor = "칼 세이건", | ||
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | ||
| contentUrls = emptyList(), | ||
| likeCount = 42, | ||
| commentCount = 8, | ||
| isSaved = false, | ||
| isLiked = false, | ||
| isWriter = false | ||
| ), | ||
| AllFeedItem( | ||
| feedId = 1, | ||
| creatorId = 123L, | ||
| creatorNickname = "user.01", | ||
| creatorProfileImageUrl = null, | ||
| aliasName = "공식 인플루언서", | ||
| aliasColor = "#97E4A3", | ||
| postDate = "2시간 전", | ||
| isbn = "9788983711892", | ||
| bookTitle = "코스모스", | ||
| bookAuthor = "칼 세이건", | ||
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | ||
| contentUrls = emptyList(), | ||
| likeCount = 42, | ||
| commentCount = 8, | ||
| isSaved = false, | ||
| isLiked = false, | ||
| isWriter = false | ||
| ), | ||
| AllFeedItem( | ||
| feedId = 1, | ||
| creatorId = 123L, | ||
| creatorNickname = "user.01", | ||
| creatorProfileImageUrl = null, | ||
| aliasName = "공식 인플루언서", | ||
| aliasColor = "#97E4A3", | ||
| postDate = "2시간 전", | ||
| isbn = "9788983711892", | ||
| bookTitle = "코스모스", | ||
| bookAuthor = "칼 세이건", | ||
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | ||
| contentUrls = emptyList(), | ||
| likeCount = 42, | ||
| commentCount = 8, | ||
| isSaved = false, | ||
| isLiked = false, | ||
| isWriter = false | ||
| ), | ||
| AllFeedItem( | ||
| feedId = 1, | ||
| creatorId = 123L, | ||
| creatorNickname = "user.01", | ||
| creatorProfileImageUrl = null, | ||
| aliasName = "공식 인플루언서", | ||
| aliasColor = "#97E4A3", | ||
| postDate = "2시간 전", | ||
| isbn = "9788983711892", | ||
| bookTitle = "코스모스", | ||
| bookAuthor = "칼 세이건", | ||
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | ||
| contentUrls = emptyList(), | ||
| likeCount = 42, | ||
| commentCount = 8, | ||
| isSaved = false, | ||
| isLiked = false, | ||
| isWriter = false | ||
| ) |
There was a problem hiding this comment.
중요: 프리뷰 데이터의 중복 feedId 수정 필요
프리뷰의 모든 AllFeedItem이 동일한 feedId = 1을 가지고 있습니다. FeedScreen에서 이 feedId를 key로 사용하므로, 중복된 key는 렌더링 문제를 일으킬 수 있습니다.
각 항목에 고유한 feedId를 부여해주세요.
AllFeedItem(
- feedId = 1,
+ feedId = 2,
creatorId = 123L,
// ...
),
AllFeedItem(
- feedId = 1,
+ feedId = 3,
creatorId = 123L,
// ...
),
AllFeedItem(
- feedId = 1,
+ feedId = 4,
creatorId = 123L,
// ...
),
AllFeedItem(
- feedId = 1,
+ feedId = 5,
creatorId = 123L,
// ...
)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ) | |
| AllFeedItem( | |
| feedId = 1, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 2, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 3, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 4, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ), | |
| AllFeedItem( | |
| feedId = 5, | |
| creatorId = 123L, | |
| creatorNickname = "user.01", | |
| creatorProfileImageUrl = null, | |
| aliasName = "공식 인플루언서", | |
| aliasColor = "#97E4A3", | |
| postDate = "2시간 전", | |
| isbn = "9788983711892", | |
| bookTitle = "코스모스", | |
| bookAuthor = "칼 세이건", | |
| contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.", | |
| contentUrls = emptyList(), | |
| likeCount = 42, | |
| commentCount = 8, | |
| isSaved = false, | |
| isLiked = false, | |
| isWriter = false | |
| ) |
🤖 Prompt for AI Agents
In
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt
around lines 96-190: the preview list uses duplicate feedId = 1 for every
AllFeedItem which will create duplicate keys in FeedScreen; assign each
AllFeedItem a unique feedId (e.g., 1,2,3,4,5 or unique longs) so keys are
unique; update any related mock data or tests that assume feedId=1.
➕ 이슈 링크
🔎 작업 내용
📸 스크린샷
2025-10-30.4.29.57.mov
😢 해결하지 못한 과제
[] TASK
📢 리뷰어들에게
Summary by CodeRabbit
릴리스 노트
새로운 기능
스타일
개선사항